home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 10 / AACD 10.iso / AACD / Games / MAME / src / cpu / z8000 / makedab.c < prev    next >
C/C++ Source or Header  |  1999-01-11  |  3KB  |  88 lines

  1. #include <stdio.h>
  2.  
  3. #define CF    0x100
  4. #define HF    0x200
  5. #define DF    0x400
  6.  
  7. int dab[0x800];
  8.  
  9. int main(int ac, char **av)
  10. {
  11.     int i, result;
  12.  
  13.     for (i = 0; i < DF; i++) {
  14.         if (i & CF) {
  15.             if (i & 0x0f < 0x0a)
  16.                 dab[i] = CF | ((i + 0x60) & 0xff);
  17.             else
  18.                 dab[i] = CF | ((i + 0x66) & 0xff);
  19.         } else {
  20.             if (i & HF) {
  21.                 if (i & 0xf0 < 0xa0)
  22.                     dab[i] = ((i + 0x06) & 0xff);
  23.                 else
  24.                     dab[i] = CF | ((i + 0x66) & 0xff);
  25.             } else {
  26.                 if ((i & 0xf0) < 0xa0 && (i & 0x0f) < 0x0a)
  27.                     dab[i] = i & 0xff;
  28.                 else if ((i & 0xf0) < 0x90 && (i & 0x0f) >= 0x0a)
  29.                     dab[i] = ((i + 0x06) & 0xff);
  30.                 else if ((i & 0xf0) >= 0xa0 && (i & 0x0f) < 0x0a)
  31.                     dab[i] = CF | ((i + 0x60) & 0xff);
  32.                 else if ((i & 0xf0) >= 0x90 && (i & 0x0f) >= 0x0a)
  33.                     dab[i] = CF | ((i + 0x66) & 0xff);
  34.                 else {
  35.                     fprintf(stderr, "unhandled $%04x\n", i);
  36.                     return 1;
  37.                 }
  38.  
  39.             }
  40.         }
  41.  
  42.         if (i & CF) {
  43.             if (i & HF) {
  44.                 dab[DF+i] = CF | ((i + 0x9a) & 0xff);
  45.             } else {
  46.                 dab[DF+i] = CF | ((i + 0xa0) & 0xff);
  47.             }
  48.         } else {
  49.             if (i & HF) {
  50.                 dab[DF+i] = CF | ((i + 0xfa) & 0xff);
  51.             } else {
  52.                 dab[DF+i] = (i & 0xff);
  53.             }
  54.         }
  55.     }
  56.  
  57.     printf("/************************************************ \n");
  58.     printf(" * Result table for Z8000 DAB instruction         \n");
  59.     printf(" *                                                \n");
  60.     printf(" * bits    description                            \n");
  61.     printf(" * ---------------------------------------------- \n");
  62.     printf(" * 0..7    destination value                      \n");
  63.     printf(" * 8       carry flag before                      \n");
  64.     printf(" * 9       half carry flag before                 \n");
  65.     printf(" * 10      D flag (0 add/adc, 1 sub/sbc)          \n");
  66.     printf(" *                                                \n");
  67.     printf(" * result  description                            \n");
  68.     printf(" * ---------------------------------------------- \n");
  69.     printf(" * 0..7    result value                           \n");
  70.     printf(" * 8       carry flag after                       \n");
  71.     printf(" ************************************************/\n");
  72.     printf("static UINT16 Z8000_dab[0x800] = {\n");
  73.     for (i = 0; i < 0x800; i++) {
  74.         if ((i & 0x3ff) == 0) {
  75.             if (i & 0x400)
  76.                 printf("\t/* sub/sbc results */\n");
  77.             else
  78.                 printf("\t/* add/adc results */\n");
  79.         }
  80.         if ((i & 7) == 0) printf("\t");
  81.         printf("0x%03x,",dab[i]);
  82.         if ((i & 7) == 7) printf("\n");
  83.     }
  84.     printf("};\n");
  85.  
  86.     return 0;
  87. }
  88.